// 辅助工具
import StrUtil from "@/utils/StrUtils.js"

/**
 * 获取CDN的真实url（有些url是CDN的ID，并不是可直接访问的url，需要转换）
 * @param {string} url url地址
 * @returns {string} 转换后CDN的url地址
 */
export const getCdnUrl = (url) => {
	// cloud://tcb-ndt2n24tbmyeiti-4c1c5ac10cb1.7463-tcb-ndt2n24tbmyeiti-4c1c5ac10cb1-1252168680/2819d26a655ae0b803022e2077071ccb/card/1700454596522.jpg
	// https://7463-tcb-ndt2n24tbmyeiti-4c1c5ac10cb1-1252168680.tcb.qcloud.la/ce88f337655263e3028004f327f52ffd/card/1699933924065_0.png
	let cdnUrl = StrUtil.deepClone(url)
	// console.log('cdnUrl 1:', cdnUrl) 
	if (!StrUtil.isEmpty(url) && url.indexOf(getApp().globalData.prefixCdnID) >= 0) {
		cdnUrl = url.replace(getApp().globalData.prefixCdnID, getApp().globalData.prefixCdnUrl)
	}
	// console.log('cdnUrl 2:', cdnUrl)
	return cdnUrl
}

/**
 * 检测url是否为CDN的url
 * （通常是用于判断是否为CDN的地址，CDN的url可拼装参数获取缩略图）
 * @param {string} url url地址
 * @returns {boolean} true-是CDN地址，false-不是CDN地址
 */
export const checkIsCdnUrl = (url) => {
	// console.log(">>>>>>url:", url)
	// console.log(">>>>preId:", getApp().globalData.prefixCdnID)
	// console.log(">>>perUrl:", getApp().globalData.prefixCdnUrl)
	if (!StrUtil.isEmpty(url)) {
		if (url.indexOf(getApp().globalData.prefixCdnID) >= 0 || 
			url.indexOf(getApp().globalData.prefixCdnUrl) >= 0) {
			return true
		}
	}
	return false
}

/**
 * 获取CDN图片缩略图
 * （方式一，指定缩放图尺寸：type=size, option={width: 100, height: 100}）
 * （方式二，缩放到原图的xx%：type=scal, option={scal: 0.5}）
 * @param {string} url url地址
 * @param {string} type 缩略图类型：size-指定尺寸（从option中获取width,height)，scal-缩放（从option中获取scal)
 * @param {object} option 参数：当type=size时要设置width和height，当type=scal时要设置scal缩放系数（0~1）
 * @returns {string} 转换后CDN的url地址
 */
export const getCdnThumbImage = (url, type='size', option={width: 150, height: 150}) => {
	// console.log("-------getCdnThumbImage: ", url, type, option)
	if (checkIsCdnUrl(url)) {
		let cdnUrl = getCdnUrl(url)
		if (type == 'scal') {
			// 方式一：
			// 缩放到原图的xx%
			// cdnUrl += `?imageMogr2/thumbnail/!${scal}p`
			// 举例：
			// 缩放到原图的50%，scal=0.5
			// cdnUrl += `?imageMogr2/thumbnail/!${scal * 100}p`
			const scal = parseInt((option.scal * 100) + '')
			cdnUrl += `?imageMogr2/thumbnail/!${scal}p`
		} else if (type == 'size') {
			// 方式二：
			// 指定缩放图尺寸：width=xx，height=xx
			// cdnUrl += `?imageView2/2/w/${width}/h/${height}`
			// 举例：
			// 指定缩放图尺寸：width=100，height=100
			// cdnUrl += `?imageView2/2/w/${width}/h/${height}`
			cdnUrl += `?imageView2/2/w/${option.width}/h/${option.height}`
		}
		// console.log(cdnUrl, '  -> CDN: true')
		return cdnUrl
	}
	// console.log(url, '  -> CDN: false')
	return url
}

/**
 * 获取头像的CDN图片缩略图
 * （指定缩放图尺寸：width: 100, height: 100）
 * @param {string} url url地址
 * @param {int} width 缩略图指定宽度
 * @param {int} height 缩略图指定高度
 * @returns {string} 转换后CDN的url地址
 */
export const getAvatarCdnThumbImage = (url, width=150, height=150) => {
	return getCdnThumbImage(url, 'size', { width: width, height: height })
}

/**
 * 获取CDN图片等比缩放的缩略图
 * （等比缩放图至原图的xx，scal缩放系数（0~1））
 * @param {string} url url地址
 * @param {float} scal 缩略图指定宽度
 * @returns {string} 转换后CDN的url地址
 */
export const getScalCdnThumbImage = (url, scal=0.5) => {
	return getCdnThumbImage(url, 'scal', { scal: scal })
}

export default {
	getCdnUrl,
	checkIsCdnUrl,
	getCdnThumbImage,
	getAvatarCdnThumbImage,
	getScalCdnThumbImage
}
